﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dados.Interfaces;
using Dados.ClassesSQLServer;
using Dados.ValueObjects;
using System.ComponentModel;

namespace Negocios
{
    [DataObject]
    public class VendaHospedagemBOMetodos
    {
        private IVendaHospedagem IhospedagemDados;

        public VendaHospedagemBOMetodos()
        {
            //verifica em algum arquivo de configuração qual o BD

            IhospedagemDados = new HospedagemSqlServer();
        }
        [DataObjectMethod(DataObjectMethodType.Insert, true)]

        public bool inserir(VendaHospedagemBO hospbo)
        {
            HospedagemVO hospVO = new HospedagemVO();
           
            hospVO.Hotel = hospbo.Hotel.Id;
            hospVO.Cliente = hospbo.Cliente.Cpf;
            hospVO.Preco = hospbo.Preco;
            hospVO.Quarto = hospbo.Quarto;
            hospVO.Usuario = hospbo.Usuario.Login;
            hospVO.Data_entrada = hospbo.Data_entrada;
            hospVO.Data_saida = hospbo.Data_saida;

            return (IhospedagemDados.Insere(hospVO) == 1);
        }
        [DataObjectMethod(DataObjectMethodType.Update, true)]
        public bool atualizar(VendaHospedagemBO hospbo)
        {
            HospedagemVO hospVO = new HospedagemVO();
            hospVO.Id = hospbo.Id;
            hospVO.Hotel = hospbo.Hotel.Id;
            hospVO.Cliente = hospbo.Cliente.Cpf;
            hospVO.Preco = hospbo.Preco;
            hospVO.Quarto = hospbo.Quarto;
            hospVO.Usuario = hospbo.Usuario.Login;
            hospVO.Data_entrada = hospbo.Data_entrada;
            hospVO.Data_saida = hospbo.Data_saida;
            return IhospedagemDados.Atualiza(hospVO) == 1;
        }
        [DataObjectMethod(DataObjectMethodType.Delete, true)]
        public bool remover(int id)
        {

            if (Consultar(id) == null)
                return false;
            else
                return IhospedagemDados.Remove(id) == 1;
        }
        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public VendaHospedagemBO Consultar(int id)
        {
            HospedagemVO hospVO = IhospedagemDados.Consulta(id);
            VendaHospedagemBO hospBO = new VendaHospedagemBO();
            hospBO.Id = hospVO.Id;
            HotelBO hbo = new HotelBO();
            hbo.Id = hospVO.Hotel;
            hospBO.Hotel = hbo;
            ClienteBO cbo = new ClienteBO();
            cbo.Cpf = hospVO.Cliente;
            hospBO.Cliente =cbo;
            hospBO.Preco = hospVO.Preco;
            hospBO.Quarto = hospVO.Quarto;
            UsuarioBO ubo = new UsuarioBO();
            hospBO.Usuario = ubo;
            hospBO.Data_entrada = hospVO.Data_entrada;
            hospBO.Data_saida = hospVO.Data_saida;


            return hospBO;

        }
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public List<VendaHospedagemBO> ConsultaTodos()
        {
            List<VendaHospedagemBO> IHospedagemBO = new List<VendaHospedagemBO>();
            List<HospedagemVO> IhospedagemVO = (new HospedagemSqlServer()).ConsultaTodos();
            foreach (HospedagemVO hospVO in IhospedagemVO)
            {
            
                VendaHospedagemBO hospBO = new VendaHospedagemBO();
                hospBO.Id = hospVO.Id;
                HotelBOMetodos hbo = new HotelBOMetodos();
              
                hospBO.Hotel = hbo.Consultar(hospVO.Hotel);
                ClienteBOMetodos cbo = new ClienteBOMetodos();
                
                hospBO.Cliente = cbo.Consulta(hospVO.Cliente);
                hospBO.Preco = hospVO.Preco;
                hospBO.Quarto = hospVO.Quarto;
                UsuarioBOMetodos ubo = new UsuarioBOMetodos();
                hospBO.Usuario = ubo.Consulta(hospVO.Usuario);
                hospBO.Data_entrada = hospVO.Data_entrada;
                hospBO.Data_saida = hospVO.Data_saida;


                IHospedagemBO.Add(hospBO);
            }
            return IHospedagemBO;
        }
    }
}